// 这个模块 专门用于处理各种数据库的操作 其它模块使用直接 require即可

const mysql = require("mysql");
const { connect } = require("../routes/users");

// 创建连接池对象 负责和数据 服务进行连接的对象

const pool = mysql.createPool({
  host: "localhost", // 主机地址
  port: "3306", // 数据库端口号
  user: "root", // 用户名
  password: "123456", // 密码
  database: "users", // 数据库名称
});

// 使用 promise 封装异步任务 方案一  连接和查询一起 
function dbHandler(sql) {
  return new Promise((resolve, reject) => {
    pool.getConnection((err, connection) => {
      if (err) {
        // 如果出现错误 直接调用 reject
         reject(err);
      } else {
          connection.query(sql,(error,data)=>{ //开始操作
              resolve(data)
          })
      }
    });
  });
}

//  连接数据库 方案二  连接和 操作sql 分开

function connectionPromise(){
    return new  Promise((resolve,reject)=>{
        pool.getConnection((err,connection) =>{
            if(err){
                reject(err)
            }else{
                resolve(connection)
            }
        })
    })
}

// 执行sql 语句
function queryPromise(conn,sql){
    return new Promise((resolve,reject)=>{
        conn.query(sql,(err,data)=>{
            if(err){
                reject(err)
            }else{
                resolve(data);
            }
        })
    })
}

async function dbHandler1(sql){
    // 1. 连接数据库
    let connres = await connectionPromise();
    // 2. 使用 sql语句 执行数据库操作

    let querRes = await queryPromise(connres,sql);

    return querRes
}

// 向外暴露
 module.exports = {
     dbHandler1
 }